/*
题目：整数转换器
• 要求用户输入十迕制整数n，程序输出n的二迕制形式和十六迕制形式；
重复，至用户输入0退出。
• 提示：
（1）用do-while循环控制用户的重复输入
（2）用下面两个函数分别实现整数的转换
• string decToHex(int ); string decToBinary(int);
• 加分项：
• 重复输入控制合理 ；编程风格良好 ；使用ostringstream构造字符串
*/
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
using namespace std;
string decToBinary(int dec)
{
    ostringstream oss;
    vector<int> v;
    for(int i = 0;i < 32;++i)
    {
        v.push_back(dec&1);
        dec >>= 1;
    }
    while(v.size())
    {
        oss << v.back();
        v.pop_back();
    }
    return oss.str();
}

string decToHex(int dec)
{
    ostringstream oss;
    string s = decToBinary(dec);
    int tmp = 0;
    char ch = 0;
    for(int i = 1;i <= 32;i++)
    {
        tmp = tmp*2 + s[i] - '0';
        // 1 10 101 1010
        // 1 2 4 10 
        if(i%4 == 0)
        {
            if(tmp > 9)
            {
                ch = tmp-10+'a';
                oss << ch;
            }
            else
                oss << tmp;
            tmp = 0;
        }
    }
    return oss.str();
}
int main()
{
    // int dex;
    // cin >> dex;
    // do
    // {
    //     cout << dec << "的32位二进制是:" << decToBinary(dec) << endl;
    //     cout << dec << "的8位十六进制是:" << decToHex(dec) << endl;
    //     cin >> dex;
    // }while(dex != 0)
    cout << decToHex(15);
    return 0;
}
